package com.ssy.lingxi.order.service.feign;

import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.order.entity.OrderDO;
import com.ssy.lingxi.order.model.dto.OrderInvoiceDTO;
import com.ssy.lingxi.order.model.dto.OrderSettlementDTO;
import com.ssy.lingxi.order.model.vo.basic.response.OrderPayTypeDetailVO;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 资金账户服务Feign接口
 * @author 万宁
 * @version 2.0.0
 * @date 2021-09-14
 */
public interface ISettleAccountFeignService {
    /**
     * 查询供应商发票信息
     * @param vendorMemberIds 供应商Id列表
     * @return 查询结果
     */
    Wrapper<List<OrderInvoiceDTO>> findMemberInvoices(List<Long> vendorMemberIds);

    /**
     * 查询账期与月结支付方式
     * @param order 订单
     * @return 账期与月结支付方式
     */
    Wrapper<OrderPayTypeDetailVO> findSettlementPaySetting(OrderDO order);

    /**
     * 查询账期与月结支付方式
     * @param buyerMemberId 采购会员Id
     * @param buyerRoleId 采购会员角色Id
     * @param vendorMemberId 供应会员Id
     * @param vendorRoleId 供应会员角色Id
     * @return 账期与月结支付方式
     */
    Wrapper<OrderPayTypeDetailVO> findSettlementPaySetting(Long buyerMemberId, Long buyerRoleId, Long vendorMemberId, Long vendorRoleId);

    /**
     * 订单发货信息通知给结算服务
     * @param settlementDTO 订单发货信息DTO
     */
    void notifyOrderSettlement(OrderSettlementDTO settlementDTO);

    /**
     * 订单支付后，将“平台”优惠券信息通知给结算服务
     * @param vendorMemberId 供应会员Id
     * @param vendorRoleId   供应会员角色Id
     * @param vendorMemberName 供应会员名称
     * @param createTime  订单创建时间
     * @param submitTime 订单提交时间
     * @param orderType 订单类型枚举，定义在 OrderTypeEnum 中
     * @param orderNo 订单编号
     * @param digest  订单摘要
     * @param totalAmount 订单总金额
     * @param coupons 优惠券列表，key为优惠券Id，value为优惠券金额
     */
    void notifyOrderCouponSettlement(Long vendorMemberId, Long vendorRoleId, String vendorMemberName, LocalDateTime createTime, LocalDateTime submitTime, Integer orderType, String orderNo, String digest, BigDecimal totalAmount, Map<Long, BigDecimal> coupons);
}
